<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class cpListe
{

	
	protected $core;
	
	public $html_prev;
	public $html_next;	
	
	private $id;
	private $sort;
	
	private $colonnes;
	
	
	
	
	
	/**
	Initialise une instance de cpListe.
	
	@param	core		<b>cpCore</b>		Référence à cpCore
	@param	id			<b>string</b>		Identifiant de la liste (utilisé pour se souvenir de la manière
												dont les résultats sont ordonnés)
	*/
	protected function __construct($core, $id)
	{

		$this->core =& $core;
		$this->id = $id;
		
		$this->html_prev = __('&#171;préc.');
		$this->html_next = __('suiv.&#187;');
		
	}

	
	/**
	Initialise les colonnes de la liste.
	
	<var>colonnes</var> est un tableau contenant un élément pour
	chaque colonne de la liste:
	- la clé de l'élément est l'identifiant de la colonne
	- l'élément est un tableau à clés numériques contenant:
		- 0: Titre de la colonne
		- 1: Clause(s) SQL permettant d'ordonner les éléments de la liste en ordre croissant
		- 2: Clause(s) SQL permettant d'ordonner les éléments de la liste en ordre décroissant
	* Omettre (1) et (2) permet d'empêcher d'ordonner les éléments selon cette colonne.

	@param	colonnes	<b>array</b>	Colonnes
	@param	ordreDefaut	<b>string</b>	Identifiant de la colonne selon laquelle on ordonne
										les résultats par défaut + "-" + ("asc" ou "desc")
	*/
	protected function initColonnes($colonnes, $ordreDefaut)
	{
		
		$this->colonnes = $colonnes;
		$this->lien = $lien;	
		
		# Déterminer la colonne à utiliser pour trier les résultats:
		if(isset($_GET['sort'])) {
			$sort = $_GET['sort'];
		} else {
			$sort = $_SESSION['sort'][$this->id];
		}

		foreach($this->colonnes as $k => $v)
		{

			if(isset($v[1]))
			{
				
				if($sort == $k.'-asc')
				{
					$this->sort = array($k, 'asc');
					$_SESSION['sort'][$this->id] = $k.'-asc';
					return;
				}
				elseif($sort == $k.'-desc')
				{
					$this->sort = array($k, 'desc');
					$_SESSION['sort'][$this->id] = $k.'-desc';
					return;
				}
				
			}
			
		}
		
		$t = explode('-', $ordreDefaut);
		$this->sort = array($t[0], $t[1]);
		$_SESSION['sort'][$this->id] = $this->sort[0].'-'.$this->sort[1];
		
		return;
		
	}
	
	
	/**
	Retourne la clause SQL correspondant à la manière choisie par l'utilisateur
	d'ordonner les résultats de la liste.
	*/
	protected function getOrdreSQL()
	{

		if($this->sort[1] == 'asc') {
			$k = 1;
		} else {
			$k = 2;
		}
		
		return $this->colonnes[$this->sort[0]][$k];
		
	}
	
	
	/**
	Retourne le code HTML correspondant à l'en-tête de la liste.
	
	@param	lien_sort	<b>string</b>	Lien à utiliser pour trier les résultats (doit contenir &sort=%s)
	@param	class		<b>string</b>	Préfixe appliqué à la classe des en-tête des colonnes
	*/
	protected function getEnteteHTML($lien_sort, $class = '')
	{
		
		$html =
		'<thead>'.
			'<tr>';
			
		foreach($this->colonnes as $k => $v)
		{
			
			if(isset($v[1]))
			{
				
				$lien = sprintf($lien_sort, $k.'-asc');
				$img = '';
				
				if($this->sort[0] == $k && $this->sort[1] == 'asc')
				{
					$lien = sprintf($lien_sort, $k.'-desc');
					$img = '<img src="images/8/sort_asc.png">';
				}
				elseif($this->sort[0] == $k && $this->sort[1] == 'desc')
				{
					$img = '<img src="images/8/sort_desc.png">';
				}
				
				$html.=
				'<th class="'.$class.$k.'"><a href="'.$lien.'"><span>'.$v[0].'</span>'.$img.'</a></th>';
				
			}
			else
			{
				$html.=
				'<th class="'.$class.$k.'">'.$v[0].'</th>';
			}

		}
		
		$html.=
			'</tr>'.
		'</thead>';
		
		return $html;
		
	}
	
}